using System;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;

namespace DbService
{
   /// <summary>
   /// Summary description for PlaatsAdvertentieInLeidschDagblad
   /// </summary>
   [WebService(Namespace = "http://localhost")]
   [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
   [ToolboxItem(false)]
   public class PlaatsAdvertentieInLeidschDagblad : System.Web.Services.WebService
   {
      [WebMethod]
       public bool PlaceAd(Klant k, int krant, byte[] image, string text)
      {
         SqlConnection sqlConn = null;
         
         try
         {
            sqlConn = new SqlConnection(Global.GetConnectionString());
            sqlConn.Open();

            SqlCommand sqlcmdValidateLogin = new SqlCommand("sp_insertAd", sqlConn);
            sqlcmdValidateLogin.CommandType = CommandType.StoredProcedure;
            //TODO: add the klant and the image type to the selected database (krant).
            sqlcmdValidateLogin.Parameters.Add(new SqlParameter("text", text));
            sqlcmdValidateLogin.Parameters.Add(new SqlParameter("image", image));

            sqlcmdValidateLogin.ExecuteNonQuery();

            // Calculate cost of ad and text.
            double factuurbedrag = CalculateCost(image.Length, text.Length);

            // Initialize factuur object.
            ERP.Factuur factuur = new ERP.Factuur();
            factuur.factuurbedrag = factuurbedrag;
            factuur.opbrengstpost = krant;
            //factuur.factuurid = 1000;
            factuur.factuurid = Global.NextId(); //TODO

            ERP.Klant klant = new ERP.Klant();
            klant.achternaam = k.Lastname;
            klant.adres = k.Address;
            klant.gebruikersnaam = k.Email;
            klant.mailadres = k.Email;
            klant.postcode = k.Postal_code;
            klant.voornaam = k.Firstname;
            klant.wachtwoord = "nopass"; //No pass is always the pass in the erp system.
            klant.woonplaats = k.City;
            factuur.klant = klant;

            // Cache the data
            Transactie cachedTransactie = new Transactie();
            cachedTransactie.Klant = klant;
            cachedTransactie.Factuur = factuur;
            TransactieQueue.Instance.Enqueue(cachedTransactie);
         }
          catch (Exception e)
          {
              Global.WriteDebugLine(e.ToString());
               sqlConn.Close();
          }
         return true;
      }

      [WebMethod]
      public double CalculateCost(int textLen, int imageLen)
      {
         //5 cent per letter en 20 cent per kb van het plaatje.
         //double textCost = text.Length * 0.05;
         //double imageCost = image.Length / 1024.0f * 0.2;
         //return Math.Round(textCost + imageCost, 2);

         double cost = textLen * 0.05 + (imageLen / 1024.0f * 0.2);
         return Math.Round(cost, 2);
      }
   }
}
